#include "spi_protocol.h"
#include "spi_9bit.h"

// 写寄存器
int spi_reg_write(uint16_t addr, uint8_t data)
{
    uint16_t tx_data[2];
    uint16_t rx_data[2];
    
    // 构造第一个9位数据包: 1位控制字(1) + 高8位地址
    tx_data[0] = CMD_WRITE | ((addr >> 1) & 0xFF);
    
    // 构造第二个9位数据包: 低1位地址 + 8位数据
    tx_data[1] = ((addr & 0x01) << 8) | data;
    
    // 发送两个9位数据包
    return spi_transfer_9bit(tx_data, rx_data, 2);
}

// 读寄存器
int spi_reg_read(uint16_t addr, uint8_t *data)
{
    uint16_t tx_data[2];
    uint16_t rx_data[2];
    
    // 构造第一个9位数据包: 1位控制字(0) + 高8位地址
    tx_data[0] = CMD_READ | ((addr >> 1) & 0xFF);
    
    // 构造第二个9位数据包: 低1位地址 + 虚拟数据(用于产生时钟)
    tx_data[1] = ((addr & 0x01) << 8) | 0x00;
    
    // 发送命令并接收数据
    if(spi_transfer_9bit(tx_data, rx_data, 2) != SPI_SUCCESS) {
        return SPI_ERROR;
    }
    
    // 从第二个接收数据包中提取8位数据
    *data = rx_data[1] & 0xFF;
    
    return SPI_SUCCESS;
} 